﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using System.Windows.Forms;
using Microsoft.Office.Interop.Word;
using Methodes.WordTemplate1;
using WordTemplate1.Methodes;

namespace WordTemplate1.Objets
{
    /// <summary>
    /// Element pour affichage dans le treeview
    /// </summary>
    public abstract class Element
    {
        #region Variables

        private int _InDocument = 0;

        public int InDocument
        {
            get { return _InDocument; }
            set { _InDocument = value; }
        }

        /// <summary>
        /// Identifient des content controls donc dépend l'élement
        /// </summary>
        private List<string> _contentcontrolsId = new List<string>();

        /// <summary>
        /// Permet de savoir si l'élément est en cours de modification
        /// </summary>
        public bool IsModify { get; set; }

        /// <summary>
        /// Type du Contenant control
        /// </summary>
        public WdContentControlType wdContentControl { get; set; }

        /// <summary>
        /// Identifiant de l'element
        /// </summary>
        private Guid _id;

        /// <summary>
        /// Identifiant de l'element
        /// </summary>
        public Guid Id
        {
            get { return _id; }
            set { _id = value; }
        }
        /// <summary>
        /// Permet de savoir si le champs peut être modifié.
        /// </summary>
        public bool ReadOnly { get; set; }

        /// <summary>
        /// Liste des ID des content controls relié a l'élément
        /// </summary>
        public List<string> ContentcontrolsId
        {
            get{ return _contentcontrolsId;}
        }


        /// <summary>
        /// Type d'élément
        /// </summary>
        public TypeElement Type { get; set; }

        /// <summary>
        /// Element treeview
        /// </summary>
        public TreeNode Tree { get; set; }


        /// <summary>
        /// Identifiant du workitem de l'élément
        /// </summary>
        private WorkItem _Workitem;

        /// <summary>
        /// Identifiant du workitem de l'élément
        /// </summary>
        public WorkItem Workitem
        {
            get { return _Workitem; }
            set { _Workitem = value; }
        }

        #endregion Variables


        public Element()
        {
            this._id = Guid.NewGuid();
            this._contentcontrolsId = new List<string>();
        }

        /// <summary>
        /// Permet d'ajouter une référence à un contentcontrol
        /// </summary>
        /// <param name="cc"></param>
        public void AddContentControl(ContentControl cc)
        {
            cc.AddElement(this);
            this.ContentcontrolsId.Add(cc.ID);
            this.InDocument++;

        }
        

        /// <summary>
        /// Permet de supprimer toute référence à cette élément dans le document
        /// </summary>
        public void DeleteDocument(ContentControl cc)
        {
            this._contentcontrolsId.Remove(cc.ID);
            this.InDocument--;
        }

    }

    /// <summary>
    /// Type d'élément à afficher dans le treeview
    /// </summary>
    public enum TypeElement
    {
        Field = 0,
        Picture = 1,
        Fichier = 2,
        Link = 3,
        WIChild = 4
    }
}
